package com.heima.a07_demo.server.controller;

import com.heima.a07_demo.common.result.Result;
import com.heima.a07_demo.pojo.dto.PatientDTO;
import com.heima.a07_demo.pojo.entity.Doctor;
import com.heima.a07_demo.pojo.entity.Patient;
import com.heima.a07_demo.pojo.vo.DoctorVO;
import com.heima.a07_demo.pojo.vo.PatientVO;
import com.heima.a07_demo.server.service.PatientService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@RequestMapping("/patients")
public class PatientController {
    @Autowired
    private PatientService patientService;

    /**
     * 添加患者
     * @param patient
     * @return
     */
    @PostMapping("/add")
    public Result<Long> addPatient(@RequestBody Patient patient) {
        log.info(patient.toString());
        if (patient.getName() == null || patient.getGender() == null || patient.getAge() == 0) {
            return Result.error("缺少必填字段");
        }
        Long patientId = patientService.addPatient(patient);
        if (patientId != null) {
            return Result.success(patientId);
        }else {
            return Result.error("添加患者失败");
        }
    }

    /**
     *
     * 历史诊断记录查询
     * @param page 当前页码，默认1
     * @param pageSize 每页记录数，默认10
     * @param name 患者姓名，支持模糊查询（可选）
     * @return 返回统一的 Result 格式数据，包含总记录数和记录列表
     */
    @GetMapping("/pageHistory")
    public Result<Map<String, Object>> getPageHistory(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String name) {
        Map<String, Object> data = patientService.getPageHistory(page, pageSize, name);
        return Result.success(data);
    }
    /**
     * 患者诊断列表分页查询接口
     * GET /patients/pageNow
     *
     * @param page 当前页码，默认1（可选）
     * @param pageSize 每页显示数量，默认10（可选）
     * @return 返回统一 Result 格式数据，包含 total、page、pageSize 和 records
     */
    @GetMapping("/pageNow")
    public Result<Map<String, Object>> getPageNow(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize) {

        Map<String, Object> data = patientService.getPageNow(page, pageSize);
        return Result.success(data);
    }

    /**
     * 删除诊断记录接口
     * DELETE /patients/delete/{id}
     *
     * @param id 需要删除的诊断记录 ID（Path 参数）
     * @return 返回统一的 Result 格式数据，data 可选返回删除结果说明
     */
    @DeleteMapping("/delete/{id}")
    public Result<String> deleteDiagnosisRecord(@PathVariable("id") Long id) {
        boolean deleted = patientService.deleteDiagnosisRecord(id);
        if (deleted) {
            return Result.success("删除成功");
        } else {
            return Result.error("删除失败，记录不存在或操作异常");
        }
    }

    /**
     * 更新患者
     * @param dto
     * @return
     */
    @PutMapping("/update")
    public Result updatePatient(@RequestBody PatientDTO dto) {
        log.info(dto.toString());
        patientService.updatePatient(dto);
        return Result.success();
    }

    // 根据患者id查询信息接口: GET /patients/show/{id}
    @GetMapping("/show/{id}")
    public Result<PatientVO> getPatient(@PathVariable("id") Long id) {
        Patient patient=patientService.getById(id);
        PatientVO patientVO=new PatientVO();
        BeanUtils.copyProperties(patient,patientVO);
        patientVO.setPatientId(id);
        return Result.success(patientVO);
    }


    @GetMapping("/show/ids")
    public Result getPatientids() {
        List<Integer> ids = patientService.getByIds();
        return Result.success(ids);
    }

}
